#ifndef __REFLECTIVESURFACE__
#define __REFLECTIVESURFACE__

#include "Material.h"
#include "RGBColor.h"
#include "Specular.h"
#include "Tracer.h"

namespace Engine
{
	class Reflective : public Engine::Material
	{
	public:
		Reflective()
		{}

		Reflective(float p_Rs, RGBColor p_color)
		{
			m_surface = new Specular(p_Rs, p_color);
			m_Kr = p_Rs;
			//m_cD = p_color;
			m_type = REFL;
		}

		float GetReflectivity()
		{
			return m_surface->GetKs();
		}

		using Engine::Material::Shade;
		RGBColor Shade(ShadeRec& sr, std::vector<Light*>& sceneLights,Tracer* p_tracer ,Light* p_ambientLight = NULL)
		{
			return m_surface->f(sr, sr.ray.d, sr.GetSpecularReflection().normalize());
		}



	protected:
		Engine::Specular* m_surface;
	};

}

#endif //!__REFLECTIVESURFACE__